#include "EnsembleCapacitesRaciales.h"

using namespace std;

/**
 * Constructeur par défaut, initialise le nom et le prix, ainsi que
 * les membres de l'ensemble. La version par défaut crée un ensemble
 * sans nom avec un prix nul, qui ne contient aucun membre.
 *
 * @param[in] capa nom de l'ensemble
 * @param[in] prix prix de l'ensemble
 * @param[in] membres liste des capacités raciales contenues (données
 * par leur indice).
 */
EnsembleCapacitesRaciales::EnsembleCapacitesRaciales( const string& capa, const unsigned& prix,
						      const vector< unsigned >& membres )
  : CapaciteRaciale( capa, prix )
{
  Membres.assign( membres.begin(), membres.end() );
}

/**
 * Initialise le nom et le prix, ainsi que les membres de
 * l'ensemble. Ce construceur permet également de déterminer une liste
 * de capacités qui ne pourront être sélectionnées une fois l'ensemble
 * choisi.
 *
 * @param[in] capa nom de l'ensemble
 * @param[in] prix prix de l'ensemble
 * @param[in] membres liste des capacités raciales contenues (données
 * par leur indice).
 * @param[in] exclus liste des capacités raciales qui ne pourront être
 * sélectionnées (données par leur indice).
 */
EnsembleCapacitesRaciales::EnsembleCapacitesRaciales( const string& capa, const unsigned& prix,
						      const vector< unsigned >& membres,
						      const vector< unsigned >& exclus )
  : CapaciteRaciale( capa, prix )
{
  Membres.assign( membres.begin(), membres.end() );
  Exclus.assign( exclus.begin(), exclus.end() );
}

/**
 * Constructeur de copie, qui permet de dupliquer une instance de
 * EnsembleCapacitesRaciales.
 *
 * @param[in] ensemble instance à copier.
 */
EnsembleCapacitesRaciales::EnsembleCapacitesRaciales( const EnsembleCapacitesRaciales& ensemble )
  : CapaciteRaciale( ensemble )
{
  Membres.assign( ensemble.membres().begin(), ensemble.membres().end() );
  Exclus.assign( ensemble.exclus().begin(), ensemble.exclus().end() );
}

/**
 * Destructeur, qui n'a rien de spécial à faire.
 */
EnsembleCapacitesRaciales::~EnsembleCapacitesRaciales()
{}


EnsembleCapacitesRaciales&
EnsembleCapacitesRaciales::operator=( const EnsembleCapacitesRaciales& ens )
{
  Nom  = ens.nom();
  Prix = ens.prix();
  
  Membres.assign( ens.membres().begin(), ens.membres().end() );
  Exclus.assign( ens.exclus().begin(), ens.exclus().end() );

  return *this;
}

/**
 * Permet d'obtenir un pointeur sur Membres.
 *
 * @return l'adresse de Membres.
 */
const vector< unsigned >* EnsembleCapacitesRaciales::membresPtr() const
{
  return &Membres;
}

/**
 * Permet d'accéder à Membres.
 *
 * @return une référence constante sur Membres.
 */
const vector< unsigned >& EnsembleCapacitesRaciales::membres() const
{
  return Membres;
}

/**
 * Permet d'obtenir un pointeur sur Exclus.
 *
 * @return l'adresse de Exclus.
 */
const vector< unsigned >* EnsembleCapacitesRaciales::exclusPtr() const
{
  return &Exclus;
}

/**
 * Permet d'accéder à Exclus.
 *
 * @return une référence constante sur Exclus.
 */
const vector< unsigned >& EnsembleCapacitesRaciales::exclus() const
{
  return Exclus;
}


